/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package radio;

/**
 *
 * @author Josue Cabrera 10018
 * Esta clase implementa la interfaz NuestraInterfaz.
 * Le da cuerpo a los metodos de la interfaz para que realicen operaciones simples
 * que son utilizadas en un radio normal de carro.
 */
import java.text.DecimalFormat;

/**
 * 
 * @author Josue Cabrera 10018
 */
public class Radio implements NuestraInterfaz{

    /**
     * @param args the command line arguments
     */
    //----- String de memoria
    private String tipo;
    private String mensaje;
    //----- variables 
    private boolean pow;
    private boolean cam;
    private double[] memFM = {87.9,87.9,87.9,87.9,87.9,87.9,};
    private double[] memAM = {530,530,530,530,530,530,};
    private double sum;
    private double valor;
    private double limite1;
    private double limite2;
    private final double lim1=87.9,lim2=107.9,lim3=530,lim4=1610,N=10,N2=0.2;
    private final String fm=" FM",am=" AM";
    
    /**
     * Metodo Constructor
     */
    public Radio() {
        // TODO code application logic here
         // asignacion de valores
    	    pow = true;
    	    cam = true;
    	    sum = N2;
    	    valor = lim1;
    	    limite1=lim1;
    	    limite2=lim2;
    	    tipo = fm;
            valor = roundTwoDecimals(valor);
            mensaje = "Estación: "+valor+tipo;
    }
    //------- Metodo que regresa double de 2 decimales
    /**
     * 
     * @param d - Double con más de 2 decimales
     * @return El parametro ingresdo con solamente 2 decimales
     */
    public double roundTwoDecimals(double d) {
        	DecimalFormat twoDForm = new DecimalFormat("#.##");
		return Double.valueOf(twoDForm.format(d));
    }

    //@Override power() realiza el camio logico de encendido y apagado
    public boolean power() {
        boolean a;
    	    if(pow)
    	    	    a= false;
            else
                    a= true;
            pow = a;
            return a;
    }

    //@Override realiza cambio logico y de variables necesarias entre banda AM y FM
    public boolean cambio() {
        boolean b;
    	    if(cam){
    	    	    valor=lim3;
    	    	    sum=N;
    	    	    limite1=lim3;
    	    	    limite2=lim4;
    	    	    b= false;
    	    	    tipo = am;
    	    	    valor = roundTwoDecimals(valor);
            }
            else{
                    valor=lim1;
    	    	    sum=N2;
    	    	    limite1=lim1;
    	    	    limite2=lim2;
    	    	    b=true;
    	    	    tipo = fm;
    	    	    valor = roundTwoDecimals(valor);
            }
            cam=b;
            return b;
    }

    //@Override
    public void fw() {
        if(valor < limite2)
    	    	    valor += sum;
    	    else
    	    	    valor = limite1;
    	    valor = roundTwoDecimals(valor);
    }

    //@Override
    public void bw() {
        if (valor > limite1)
    	  	  valor -= sum;
    	  else
    	  	  valor = limite2;
    	  valor = roundTwoDecimals(valor);
    }

    //@Override
    public void store(int boton) {
        if (cam)
    	    	    memFM[boton]= valor;
    	    else
    	    	    memAM[boton]= valor;
    }

    //@Override
    public void select(int boton) {
        if(cam)
    	    	    valor = memFM[boton];
    	    else
    	    	    valor = memAM[boton];
    	    valor = roundTwoDecimals(valor);
    }

    /**
     * 
     */
    //@Override
    public void salir() {
        //throw new UnsupportedOperationException("Not supported yet.");
    }
    public String toString(){
        String estado;
        mensaje = "Estación: "+valor+tipo;
        estado = mensaje;
        return estado;
    }
}
